编程语言“鄙视链” +1?亚马逊力捧 Rust,Go 技术负责人连发 14 条推特抵制“拉踩”
每个领域总有一些说不清道不明的“鄙视链”,在程序员圈中尤是如此。从编程语言、编辑器、工具,到浏览器、服务器系统,甚至 { 要写在 if 的同一行还是下一行,都能引起不同阵营程序员的无情嘲讽。
例如在编程语言方面,就曾有一个流传广泛的“鄙视链”:写汇编语言的看不起写 C 语言的;写 C 语言的看不起写 C++ 的;写 C++ 的看不起写 Java 和 C# 的;Java 工程师和 C# 工程师不仅相互鄙视,还一致看不起写 Python 的;然而,所有工程师都鄙视 PHP 工程师。
虽然这串说法很大程度上是出于调侃,但多数程序员的确都认为自己用的编程语言和开发工具才是最好的,因此对于一些意见不合的“小打小闹”许多程序员早已司空见惯。
不过,近期 Rust 和 Go 之间的动静还是让许多人为之一振:在 AWS 官博发布“Sustainability with Rust(Rust 的可持续性)” 一文及外媒 ZDNet 对其报道后,Go 技术负责人 Russ Cox 连发 14 条推特,炮轰该文对 Go 的“拉踩”行为。
为 Rust 投资的 AWS
提及 Rust,称赞其一句“年少有为”或许并不为过。2015 年才上线的 Rust,在这 7 年里逐渐成长为“大厂团宠”:多年被 Stack Overflow 评选为最受开发者喜爱的语言、微软曾表示 Rust 是 C 和 C++ 的最佳替代方案、谷歌宣布在 Android 中支持 Rust、Rust 还可能进驻 Linux 内核等等。
众多大厂中,亚马逊对 Rust 的投资也在逐年增加,其坦然表示:“在 AWS,Rust 正在迅速成为大规模构建基础设施的关键。”
2018 年,AWS 推出了第一款使用 Rust 编程的开源虚拟化技术产品 Firecracker ,随后还使用 Rust 支持 Amazon Simple Storage Service(Amazon S3),Amazon Elastic Compute Cloud(Amazon EC2),Amazon CloudFront 等服务,最近更是最新发布了一套用 Rust 编写、基于 Linux 的容器操作系统 Bottlerocket。
除了自家产品越来越多依赖 Rust,AWS 也在 2019 年成为了 Rust 项目的赞助商,还于 2021 年与谷歌、华为、微软和 Mozilla 共同创建了 Rust 基金会——AWS 认为“借助 Rust 可以构建可持续和安全的解决方案”。
为了证明这一切并不是对 Rust 的盲目自信,AWS 在“Sustainability with Rust”一文中引用了一份对编程语言的能源消耗、性能和内存使用相关研究报告,以此说明 Rust 在可持续性方面的优越。
然而,也就是由 AWS 对这份报告的分析开始,引得 Go 技术负责人 Russ Cox 感到不满。
14 条推文,为 Go“正名”
“我本来不想多说什么,但因为 ZDNet 也报道了一遍 AWS 的‘Sustainability with Rust’博客文章,所以我觉得有必要发一个简短的帖子说明一下有关 Go 被误解的部分。”这是 Russ Cox 决定为 Go“正名”的宣言,也是 14 条推文的第一条。
过时的“一项有趣研究”
首先,Russ Cox 对 AWS 博文中“一项几年前非常有趣的研究”这一说法就很不满。他表示,这份研究报告发布于 2017 年 10 月,当时用的还是 Intel i5-4460 CPU(于 2014 年第二季度发布)和 Go 1.6(于 2016 年 2 月推出)。Russ Cox 直言:“那已经是永远的过去式了。”
其次,该报告还显示 C++ 比 C 多消耗 34% 的能量、56% 的时间和 14% 的内存,对此 Russ Cox 忍不住提出质疑:“几乎每个 C 程序都是一个有效的 C++ 程序,所以 C++ 根本就没那么失败和糟糕。”
以 Discord 为例,AWS 却故意“拉踩” Go
上面这份研究报告实际上并没有对 Go 造成什么实质影响,接下来博文中提到聊天软件 Discord 从 Go 切换到 Rust 的例子才彻底“惹毛”了 Russ Cox,他斥责道这是“令人难以置信的误导”。(注:Discord 原本有一项服务主要由 Go 编写,但存在延迟问题,后决定尝试用 Rust 重写服务,并由此整理出一篇二者对比的文章。)
首先,Discord 原文中显示了一个同时绘制 Go 服务器和等效 Rust 服务器的图表:虽然 Rust 看似具有更可预测的性能并优化了 Go 的延迟峰值,但总体来说表现还是大致相当的。
而 AWS 在对 Rust 服务器用新数据结构和更多 RAM 进行了大范围重写后,在旁边放了 Go 的原始图表,Russ Cox 对此表示:“这要么是对 Discord 原帖完全误解,要么就是公然作假。”
Russ Cox 继续翻看 Discord 的原文,发现问题根本不在于 Discord:“Discord 的对比是公平的,它显示了 Go 服务器和同等条件下的 Rust 服务器的比较,而 AWS 博文中‘重写后 Rust 服务器的性能’在 Discord 文章中原本是单独列出的,并未与 Go 进行对比,即 AWS 故意歪曲了这一点。”
对于这一发现,相比气愤,Russ Cox 更多是遗憾:“AWS 的文章确实对 Rust 提出了一些真实、公平的观点,但这也更让人觉得其中居然包含对 Go 的误导性言论感到遗憾:他们本不需要这样做,Rust 完全可以独立存在。”
其实撇开这次 AWS为了 Rust “拉踩” Go 的行为不谈,Russ Cox 本身对 Rust 并无偏见,甚至还对 Go 和 Rust 如何相互协同工作非常感兴趣,为此他还推荐了一篇文章:《Rust vs. Go:为什么它们在一起更好》。(原文地址:https://thenewstack.io/rust-vs-go-why-theyre-better-together/)
编程语言总是优劣并存
正如开头所说,多数程序员总是偏爱自己熟知且常用的编程语言,但这并不是“拉踩”其他语言的理由,每种编程语言得以长期存在,自有其独到之处。
@sblom:“我虽然不是 Go 的粉丝,甚至其实我更喜欢像 C#、Rust、Scala 这类更具表现力的语言,但我不会因为 Go 在其不擅长的地方显得劣势而瞧不起它。正如 Go 在某些方面做得就不错,每种语言也都有缺点。”
@new_stranger:“我原先还很担心使用脚本语言的创业公司未来的唯一出路只能是 Java 或 C++,所以我真的很高兴能同时存在 Rust 和 Go,能够简单处理其他语言中事后才想到的事情真是太好了!”
@brabel:“Rust 是一门复杂的语言,具有很多特性,因此较难掌握;Go 是非常简单的语言,虽然功能较少,但容易学习和编写。但这两种不同风格的语言也为程序员们提供了更多的选择。”
那么,你更喜欢哪些编程语言呢?
参考链接:
https://aws.amazon.com/cn/blogs/opensource/sustainability-with-rust/
https://twitter.com/_rsc/status/1496352325157457922
https://news.ycombinator.com/item?id=30441771
《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造